package com.example.myapplication

//主构造函数写在类名后面,constructor 修饰,没有特殊修饰可以不写,
// 跟Java一样有个默认的构造函数 ,所以单例写法: class User private constructor () { /*...*/ },
//主构造函数加 var 是为了将该参数作为成员变量使用,从构造函数不可以
data class User constructor(var name: String, var sex: String) {

    private val one = "wy-第一步执行:$name".also(::println)
        

    init {
        println("wy-第二步执行$sex")
    }

    //从构造函数,如果这个类有主构造函数,每个从构造函数都需要用this,委托一遍主构造函数,没有可以不写
    constructor(firstName: String) : this(firstName, "不告诉lastName") {
        println("wy-从构造函数,在---声明和初始化代码块----之后执行,与位置无关: $firstName")
    }

    val three = "wy-第三步执行:$name".also(::println)

    init {
        println("wy-第四步执行$sex")
    }


    //函数默认值
    fun setData(name: String = "没有", sex: String = "不详") {
        this.name = name
        this.sex = sex
        println("wy-: $name --- $sex")
    }




}

